﻿unit FTPProctol;
 
interface

uses
  Winapi.Windows, Winapi.Messages, PacketProctol;

const

//***********            文件传输消息定义           *************/

  //服务器消息
  SM_FTP_LOGIN                   = 100;                   //用户登录
  SM_FTP_UPLOAD_REQUEST          = 101;                   //文件上传请求
  SM_FTP_UPLOAD_CHECK            = 102;
  SM_FTP_UPLOAD_DATA             = 103;                   //文件上传数据
  SM_FTP_UPLOAD_OVER             = 104;                   //文件上传结束
  SM_FTP_DOWNLOAD_REQUEST        = 105;                   //文件下载请求
  SM_FTP_DOWNLOAD_DATA           = 106;                   //文件下载数据
  SM_FTP_DOWNLOAD_OVER           = 107;                   //文件下载结束
  SM_FTP_DOWNLOAD_FILELIST       = 108;                   //文件下载列表
  SM_FTP_DOWNLOAD_FILELIST_NEXT  = 109;                   //文件下载列表(得到一个文件)


  //客户端消息
  CM_FTP_LOGIN                   = 200;                   //用户登录
  CM_FTP_UPLOAD_REQUEST          = 201;                   //文件上传请求
  CM_FTP_UPLOAD_CHECK            = 202;                   //断点上传
  CM_FTP_UPLOAD_DATA             = 203;                   //文件上传数据
  CM_FTP_UPLOAD_OVER             = 204;                   //文件上传结束
  CM_FTP_DOWNLOAD_REQUEST        = 205;                   //文件下载请求
  CM_FTP_DOWNLOAD_DATA           = 206;                   //文件下载数据
  CM_FTP_DOWNLOAD_OVER           = 207;                   //文件下载结束
  CM_FTP_DOWNLOAD_FILELIST       = 208;                   //文件下载列表
  CM_FTP_DOWNLOAD_FILELIST_NEXT  = 209;                   //文件下载列表(得到一个文件)
  //文件块传输大小
  Glo_UploadBlockData            = 4096;                  //上传文件块
  Glo_DownLoadBlockData          = 4096*2;                //下载文件块
  //文件传输事件
  WM_UPLOAD_BEGIN                = WM_USER + 100;       //开始上传
  WM_UPLOAD_ONE_BEGIN            = WM_USER + 101;       //开始上传一个文件
  WM_UPLOAD_ONE_BLOCK            = WM_USER + 102;       //开始上传文件块
  WM_UPLOAD_ONE_OVER             = WM_USER + 103;       //一个文件上传结束
  WM_UPLOAD_ONE_TERM             = WM_USER + 104;       //一个文件上传被终止
  WM_UPLOAD_ONE_REQUEST          = WM_USER + 105;       //服务器接受一个上传请求
  WM_UPLOAD_END                  = WM_USER + 106;       //结束上传

  WM_DOWNLOAD_BEGIN              = WM_USER + 200;     //开始下载
  WM_DOWNLOAD_ONE_BEGIN          = WM_USER + 201;     //开始下载一个文件
  WM_DOWNLOAD_ONE_BLOCK          = WM_USER + 202;     //开始下载文件块
  WM_DOWNLOAD_ONE_OVER           = WM_USER + 203;     //一个文件下载结束
  WM_DOWNLOAD_ONE_TERM           = WM_USER + 204;     //一个文件下载被终止
  WM_DOWNLOAD_ONE_REQUEST        = WM_USER + 205;     //服务器接受一个下载请求
  WM_DOWNLOAD_END                = WM_USER + 206;     //结束下载
  WM_DOWNLOAD_ADDLIST            = WM_USER + 207;     //增加下载列表
  WM_UPDOWNFILE_ERROR            = WM_USER + 401;     //错误

type
//***********           数据包(文件传输)定义        *************/
//--------------------------【公共文件切割包】：-------------------------------
  PTDIFTPPak_CutFile_Response = ^TDIFTPPak_CutFile_Response;
  TDIFTPPak_CutFile_Response = Packed Record
    dFilePos:           Int64;                                  //文件传输开始点
    dFileIndex:         Cardinal;                               //文件索引
    dBlockSize:         Cardinal;                               //文件块大小
    dEndBlockSize:      Cardinal;                               //最后一块大小
    dBlockCount:        Int64;                                  //文件块数
    dDataBlockID:       Int64;                                  //开始上传块索引(第一次默认1)
    dEncryptKey:        WORD;                                   //密钥传输
  end;

//--------------------------【数据传输断点回应包】：---------------------------
  PTDIFTPPak_FileCheck_Response = ^TDIFTPPak_FileCheck_Response;
  TDIFTPPak_FileCheck_Response = Packed Record
    dFileSize:          Int64;
    dCheckSum:          Cardinal;
  end;

//--------------------------【数据传输断点请求包】：---------------------------
  PTDIFTPPak_FileCheck_Request = ^TDIFTPPak_FileCheck_Request;
  TDIFTPPak_FileCheck_Request = Packed Record
    dFilePos:           Int64;
    dFileSize:          Int64;
    dFileCheck:         Boolean;
  end;


//--------------------------【数据传输请求包】：-------------------------------
  PTDIFTPPak_TransData_Request = ^TDIFTPPak_TransData_Request;
  TDIFTPPak_TransData_Request = Packed Record
    dFileIndex:         Cardinal;                                //文件索引
    dDataBlockID:       Int64;                                   //文件操作块索引(下一次)
    dEncryptKey:        WORD;                                    //密钥传输
  end;

//--------------------------【数据传输回应包】：-------------------------------
  PTDIFTPPak_TransData_Response = ^TDIFTPPak_TransData_Response;
  TDIFTPPak_TransData_Response = Packed Record
    dEncryptKey:        WORD;                                   //传输密钥
    dFileIndex:         Cardinal;                                  //文件索引
    dDataBlockID:       Int64;                                  //文件块号
    dBlockSize:         Cardinal;                                  //文件块大小
    dCheckSum:          Cardinal;                                  //校验和
    //Data:             PChar;                                  //块数据
  end;

//--------------------------【用户登录包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_LOGIN 100
//﹤格式﹥：      包头 + 包体 + 登录注册包(TDIFTPPak_CSUserLogin) 
//﹤数据结构﹥：  有
  PTDIFTPPak_CSUserLogin = ^TDIFTPPak_CSUserLogin;
  TDIFTPPak_CSUserLogin  = Packed Record
    sUserNuber:         array [0..11] of char;                  //用户User编号
    sUserPwd:           array [0..11] of char;                  //密码
  end;
// S->C
//﹤命令标志﹥：  CM_FTP_LOGIN 200
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)
//﹤结构﹥：      公共应答包


//--------------------------【文件上传请求包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_UPLOAD_REQUEST 101
//﹤格式﹥：      包头 + 包体 + 文件上传请求包(TDIFTPPak_CSUpload_Request)
  PTDIFTPPak_CSUpload_Request = ^TDIFTPPak_CSUpload_Request;
  TDIFTPPak_CSUpload_Request = Packed Record
    pakUserInfo:        TDIFTPPak_CSUserLogin;                  //用户信息
    sFileName:          array [0..255] of char;                 //文件名
    dFileSize:          Int64;                                  //文件长度
  end;

// S->C
//﹤命令标志﹥：  CM_FTP_UPLOAD_REQUEST 201
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+TDIFTPPak_CutFile_Response



//--------------------------【文件上传数据包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_UPLOAD_DATA 102
//﹤格式﹥：      包头 + 包体 + 文件上传数据包(TDIFTPPak_TransData_Response)

// S->C
//﹤命令标志﹥：  CM_FTP_UPLOAD_DATA 202
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+TDIFTPPak_TransData_Request


//--------------------------【文件上传完成包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_UPLOAD_OVER 103
//﹤格式﹥：      包头 + 包体 + 文件上传请求包(TDIFTPPak_CSUpload_Request)
  PTDIFTPPak_CSUpload_OVER = ^TDIFTPPak_CSUpload_OVER;
  TDIFTPPak_CSUpload_OVER = Packed Record
    pakUserInfo:        TDIFTPPak_CSUserLogin;                  //用户信息
    sFileName:          array [0..255] of char;                 //文件名
  end;

// S->C
//﹤命令标志﹥：  CM_FTP_UPLOAD_OVER 203
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion) 



//--------------------------【文件下载请求包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_DOWNLOAD_REQUEST 104
//﹤格式﹥：      包头 + 包体 + 文件上传请求包(TDIFTPPak_CSUpload_Request)
  PTDIFTPPak_CSDownload_Request = ^TDIFTPPak_CSDownload_Request;
  TDIFTPPak_CSDownload_Request = Packed Record
    pakUserInfo:        TDIFTPPak_CSUserLogin;                  //用户信息
    dFileIndex:         Cardinal;                               //文件索引
    sFileName:          array [0..255] of char;                 //文件名
    dFileSize:          int64;
    dCheckSum:          Cardinal;
  end;

// S->C
//﹤命令标志﹥：  CM_FTP_DOWNLOAD_REQUEST 204
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+TDIFTPPak_CutFile_Response


//--------------------------【文件下载数据包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_DOWNLOAD_DATA 105
//﹤格式﹥：      包头 + 包体 + 数据传输请求包(TDIFTPPak_TransData_Request)

// S->C
//﹤命令标志﹥：  CM_FTP_DOWNLOAD_DATA 205
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+
//                TDIFTPPak_CSUpload_DataResponsion
  PTDIFTPPak_CSDownload_DataResponsion = ^TDIFTPPak_CSDownload_DataResponsion;
  TDIFTPPak_CSDownload_DataResponsion = Packed Record
    pakGlobalRes:       TDIGlobalPak_Responsion;       //公共返回包
    pakTransRes:        TDIFTPPak_TransData_Response;  //数据传输包
  end;

//--------------------------【文件下载结束包】：-------------------------------
// S->C           服务器主动告诉客户端
//﹤命令标志﹥：  CM_FTP_DOWNLOAD_OVER 206
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)

// C->S           客户端被动回应
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_DOWNLOAD_OVER 106
//﹤格式﹥：      包头 + 包体 + 下载结束包(TDIFTPPak_CSDownload_OVER)
  PTDIFTPPak_CSDownload_OVER= ^TDIFTPPak_CSDownload_OVER;
  TDIFTPPak_CSDownload_OVER = Packed Record
    pakUserInfo:        TDIFTPPak_CSUserLogin;                  //用户信息
    sFileName:          array [0..255] of char;                 //文件名
  end;




//--------------------------【文件列表请求包】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_DOWNLOAD_FILELIST 107
//﹤格式﹥：      包头 + 包体 + 文件列表请求包(TDIFTPPak_CSUserLogin)

// S->C
//﹤命令标志﹥：  CM_FTP_DOWNLOAD_FILELIST 207
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+
//                TDIFTPPak_SCFileList_Response
  PTDIFTPPak_SCFileList_Response = ^TDIFTPPak_SCFileList_Response;
  TDIFTPPak_SCFileList_Response = Packed Record
    dFileCount:         Cardinal;                                  //文件个数
  end;

//--------------------------【文件列表得到文件】：-------------------------------
// C->S
//﹤认证﹥：      否
//﹤命令标志﹥：  SM_FTP_DOWNLOAD_FILELIST_NEXT 108
//﹤格式﹥：      包头 + 包体 + 文件列表请求包(TDIFTPPak_SCFileList_Next)
  PTDIFTPPak_SCFileList_Next = ^TDIFTPPak_SCFileList_Next;
  TDIFTPPak_SCFileList_Next = Packed Record
    pakUserInfo:        TDIFTPPak_CSUserLogin;                  //用户信息
    dFileIndex:         Cardinal;                                  //文件索引
  end;

// S->C
//﹤命令标志﹥：  CM_FTP_DOWNLOAD_FILELIST_NEXT 208
//﹤数据结构﹥：  有
//﹤格式﹥：      包头 + 包体 + 公共应答包(TDIGlobalPak_Responsion)+
//                TDIFTPPak_SCFileListNext_Response
  PTDIFTPPak_SCFileListNext_Response = ^TDIFTPPak_SCFileListNext_Response;
  TDIFTPPak_SCFileListNext_Response = Packed Record
    dFileIndex:         Cardinal;                                  //文件索引
    dFileSize:          Int64;                                  //文件大小
    sFileName:          array [0..255] of char;                 //文件名
  end;

implementation


end.

